# @Time : 2020/6/25 15:35
# @Author : Fioman 
# @Phone : 13149920693
"""
函数内省
除了__doc__,函数对象还有其他很多的属性.使用dir(func)可以看到函数具有如下的属性:
['__annotations__', '__call__', '__class__', '__closure__', '__code__',
'__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__',
'__format__', '__ge__', '__get__', '__getattribute__', '__globals__',
'__gt__', '__hash__', '__init__', '__kwdefaults__', '__le__', '__lt__',
'__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
'__subclasshook__']

如何得到类的实例没有而函数具有的属性列表呢?使用差集就可以得到.
"""


class C:
    pass


obj = C()


def func():
    pass

div_set = sorted(set(dir(func)) - set(dir(obj)))
print("函数比一般的实例多出来的属性:{}".format(div_set))
"""
__annotations__    dict  参数和返回值的注解
__call__           methodwrapper  实现()运算符: 即可调用对象协议
__closure__        tuple          函数闭包,即自由变量的绑定(通常是None)
__code__           code           编译成字节码的函数元数据和函数定义体
__defaults__       tuple          形式参数的默认值
__get__            methodwarpper  实现只读描述符协议
__globals__        dict           函数所在模块中的全局变量
__kwdefaults__     dict           仅限关键字形式参数的默认值
__name__           str            函数名称
__qualname__       str            函数的限定名称,如Random.choice
"""


















